#include"Stack.h"

//初始化
void STInit(ST* pst)
{
    assert(pst);
    pst->a=NULL;
    pst->capacity=0;
    //表示top指向栈顶下一个元素
    pst->top=0;

    //指向栈顶元素
    //pst->top=-1;
}

//销毁
void STDestory(ST* pst)
{
    assert(pst);
    if(pst->a)
    {
        free(pst->a);
    }
    pst->a=NULL;
    pst->top=pst->capacity=0;
}

//插入
void STPush(ST* pst,STDataType x)
{
    assert(pst);
    if(pst->top==pst->capacity)
    {
        int newcapacity=pst->capacity==0?4:pst->capacity*2;
        STDataType*tmp=realloc(pst->a,sizeof(STDataType)*newcapacity);
        if(tmp==NULL)
        {
            perror("realloc fail");
            return;
        }
        pst->a=tmp;
        pst->capacity=newcapacity;
    }
    pst->a[pst->top]=x;
    pst->capacity++;
}

//出栈
void STPop(ST* pst)
{
    assert(pst);
    assert(pst->a>0);
    pst->top--;
}

//判空
bool STEmpty(ST* pst)
{
    assert(pst);
    return pst->top==0;
}

//长度
int STSize(ST* pst)
{
    assert(pst);
    return pst->top;
}

//栈顶
STDataType STTop(ST* pst)
{
    assert(pst);
    assert(pst->a>0);
    return pst->a[pst->top-1];
}